使用此变量可将给定可视区域的内容设为绘制曲面,或者得到目前被分配给这个可视区域的表面。在处理曲面时,通常需要把整个 屏幕上的可视区域捕获到表面,所以你需要使用此变量来将表面分配给一个可视区域。这意味着所选视野内的所有显示的画面将被绘制到指定的表面。此视野现在不会被绘制到屏幕上,这意味着你需要做下列操作:
- 启用一个新的视野,在新视野中绘制表面(使用 view_current 检测正在绘制哪个视野)。
- 既然GUI层是独立出视野的,那么可以在一个实例的GUI事件中绘制表面。
你可以读取这个变量以获取选择的表面的已经指定的表面的索引,如果没有指定表面则返回-1,并且一般用于这个函数的表面应该和视野一样大小(不是可视区域)。下面的扩展例子展示了在 Draw GUI 事件中捕获视野的基本设置,更多表面的信息查看章节 Reference - Surfaces。
注意,你也可以用函数 view_set_surface_id()来为可视区域设置表面。
view_surface_id[0...7];
实数(表面的索引,如果没有索引,就返回-1)
在这个扩展例子里,我们将创建一个表面并且指定给 view port[0],然后在 Draw GUI 事件中绘制到屏幕上。首先我们需要在创建事件(Create Event)中初始化表面变量。
surf = -1;
由于所有的表面函数真正在 Draw 事件中使 用,为了防止奇怪的错误或者未定义的行为,我们设置表面变量为-1。 接着,那个完成之后,我们需要在主要的Draw 事件中做这些事件:
if !surface_exists(surf)
{
surf = surface_create(camera_get_view_width(view_camera[0]), camera_get_view_height(view_camera[0]));
view_surface_id[0] = surf;
}
表面是 不稳定的,意味着系统内存的管理或其它原因,它们可能会从内存中销毁,所以这里检测表面是否存在,如不存在则创建它,并指定给一个视野。之后,所以将出现在视野view 0中的事物现在绘制到我们创建的表面层里。. 如果不做到这一步,运行游戏时将会简单的获得一个空白的屏幕,因为所有的绘制都是在表面里完成的,但是表面层并不会在任何地方绘制出来。因为现在需要在 Draw GUI 事件中,像这样绘制这个表面到屏幕上:
if surface_exists(surf)
{
draw_surface_stretched(surf, 0, 0, display_get_gui_width(), display_get_gui_height());
}
此代码将拉伸我们从视野摄像机绘制的表面,以填满整个GUI层。